#ifndef __THREAD_POOL_H_
#define __THREAD_POOL_H_


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdbool.h>
#include <strings.h>
#include <errno.h> // 全局变量（临界资源），所有库函数都会修改它
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <pthread.h> // POSIX thread
#include <semaphore.h> // for sem_post()/sem_wait()
#define MAX_WAITING_TASKS	1000
#define MAX_ACTIVE_THREADS	20

//任务链
struct task
{
    void *(*do_task)(void *arg);
    void *arg;
    struct task *next;
};


//线程池
typedef struct thread_pool
{
    pthread_mutex_t lock; //互斥锁，保护任务队列
    pthread_cond_t cond; //条件变量，同步所有线程
    bool shutdown; //线程池销毁标记
    struct task *task_list; //任务链队列指针
    pthread_t *tids; //线程ID存放位置
    unsigned max_waiting_tasks; //最大等待任务数
    unsigned int waiting_tasks; //任务链队列中等待的任务个数
    unsigned int active_threads; //当前活跃线程个数
}thread_pool;



#endif